When data may be accessed and updated simultaneously, locks are used to prevent data from being accessed in an inconsistent state. For example, if data is changed while the data is being read, incorrect data may be read. Additionally, if two writers of the data simultaneous try to update the data, the data may be left in an inconsistent state. A lock may be used to serialize the reading and writing of data to solve these issues. However, utilizing locks requires a reader and writer of the data to wait until another reader or writer has released a lock. In situations where the data needs to be constantly updated and read, utilizing locks may be inefficient or impractical due to the volume of read and write requests for the data. For example, in a system that predicts the probability that a particular type of user will select a particular content, the probability is being constantly updated based on observed selection behavior of users as well as accessed to determine whether to display the particular content to a user of the particular type. It is often inefficient and impractical to utilize a single lock to protect a constantly updated and accessed data. Therefore, there exists a need for a better way to change and access data on a larger scale.